<?php
/**
 * 列表操作
 * @App	
 * @Group 
 * @Action ListTrait
 * @author lilei
 * @date 2018年5月26日
 *
 */
namespace app\common\redis\traits;
trait ListTrait{
	/**
	 * Redis 操作句柄
	 * @var CacheRedis|Redis
	 */
	public $redis_handle ;
	
	public function test() {
		
	}
	
	/**
	 * 在名称为key的list左边（头）添加一个值为value的 元素
	 * @param string|int $item
	 * @param string $key
	 */
	public function ListLpush($item, $key='') {
		$_key = $key ?: $this->key;
		$res = $this->redis_handle->lPush($_key, $item);
		return $res;
	}
	
	/**
	 * 在名称为key的list左边（头）批量添加元素
	 * @param array $push_list
	 * @param string $key
	 * @return mixed
	 */
	public function ListMutiLpush ( array $push_list, $key='' ) {
		$_key = $key ?: $this->key;
		$p[] = $_key;
		foreach ($push_list as $v){
			$p[] = $v;
		}
		$res = call_user_func_array(array($this->redis_handle, 'lPush'), $p);
		return $res;
	}
	
	/**
	 * 在名称为key的list右边（尾）添加一个值为value的 元素
	 * @param string|int $item
	 * @param string $key
	 */
	public function ListRpush($item, $key='') {
		$_key = $key ?: $this->key;
		$res = $this->redis_handle->rPush($_key, $item);
		return $res;
	}
	
	/**
	 * 在名称为key的list右边（尾）批量添加添加元素
	 * @param array $push_list
	 * @param string $key
	 * @return mixed
	 */
	public function ListMutiRpush( array $push_list, $key='' ) {
		$_key = $key ?: $this->key;
		$p[] = $_key;
		foreach ($push_list as $v){
			$p[] = $v;
		}
		$res = call_user_func_array(array($this->redis_handle, 'rPush'), $p);
		return $res;
	}

    /**
     * 取出右侧元素
     * @param string|int $item
     * @param string $key
     */
    public function ListRPop( $key='' ) {
        $_key = $key ?: $this->key;
        $res = $this->redis_handle->rPop( $_key );
        return $res;
    }
	
	/**
	 * 返回名称为key的list中start至end之间的元素（end为 -1 ，返回所有）
	 * @param number $start
	 * @param number $end
	 * @param string $key
	 * @return array
	 */
	public function ListlRange( $start=0, $end=-1,$key='') {
		$_key = $key ?: $this->key;
		$res = $this->redis_handle->lrange($_key, $start, $end);
		return $res;
	}
	
	/**
	 * 返回名称为key的list中index位置的元素
	 * @param int $index  0表示第一个
	 * @param string $key
	 * @return mix
	 */
	public function ListlGet($index=0 , $key='') {
		$_key = $key ?: $this->key;
		$res = $this->redis_handle->lGet($_key, $index);
		return $res;
	}
	
	/**
	 * 返回list的数量
	 * @param string $key
	 * @return int
	 */
	public function ListSize( $key='' ) {
		$_key = $key ?: $this->key;
		$res = $this->redis_handle->lSize($_key);
		return (int) $res;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}